unit clsProdEAN;

interface

uses Dm, dbtables, biblio, Sysutils, clsParametros;

type
  TProdEAN = class(TObject)
  private
    PRO_CODIGO: string;
  public
    PRO_NUMEROEMB: string;
    PRO_EAN: string;
    PRO_VIDROS: Integer;
    xVolume: Integer;
    function Gravar(p_PRO_CODIGO: string; p_Embalagem: string): Byte;
    function Recuperar(p_PRO_CODIGO: string; p_Embalagem: string): Byte;
    function RecuperarProd(p_Ean: string): string;
    function RecuperarProd1(p_Ean: string): string;
    procedure Consultar(p_PRO_CODIGO: string; var tq: Tquery);
    function Excluir(p_PRO_CODIGO: string; p_Embalagem: string): Byte;
    function ExcluirTudo(p_PRO_CODIGO: string): Byte;
    procedure RecuperaVolume(p_PRO_CODIGO: string);
    function Ultimo: string;
  end;

implementation

{ TProdEAN }

function TProdEAN.Excluir;
var
  tq: TQuery;
begin
  tq := Tquery.Create(DmInt);
  tq.databasename := dmint.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.params.clear;
  tq.sql.add('DELETE FROM PRODEAN where Pro_Codigo =:Produto and Pro_NumeroEmb = :Embalagem');
  tq.parambyname('Produto').asstring := p_PRO_CODIGO;
  tq.ParamByName('Embalagem').Asstring := p_Embalagem;
  tq.execSQL;
  Result := 1;
  tq.close;
  tq.Free;
end;

function TProdEAN.Gravar;
var
  tq: TQuery;
begin
  tq := Tquery.Create(DmInt);
  tq.databasename := dmint.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.params.clear;
  tq.sql.add('SELECT * FROM ProdEAN where Pro_Codigo =:Produto and Pro_NumeroEmb = :Embalagem');
  tq.parambyname('Produto').asstring := p_PRO_CODIGO;
  tq.ParamByName('Embalagem').Asstring := p_Embalagem;
  tq.open;
  if tq.eof then begin
    tq.sql.clear;
    tq.params.clear;
    tq.sql.add('INSERT INTO ProdEAN VALUES(:Produto,:Embalagem,:k_ProEan,:K_ProVidro)');
  end else begin
    tq.sql.clear;
    tq.params.clear;
    tq.sql.add('UPDATE ProdEAN SET Pro_Ean =:k_ProEan, Pro_Vidros =:k_ProVidro WHERE ' +
      'Pro_Codigo =:Produto and Pro_NumeroEmb = :Embalagem');
  end;
  tq.parambyname('Produto').asstring := p_PRO_CODIGO;
  tq.ParamByName('Embalagem').Asstring := p_Embalagem;
  tq.parambyname('k_ProEan').Asstring := PRO_EAN;
  tq.ParamByName('K_ProVidro').AsInteger := PRO_VIDROS;
  tq.close;
  tq.execsql;
  result := 1;
  tq.Free;

end;

function TProdEAN.Recuperar;
var
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.sql.add('SELECT * FROM ProdEAN where Pro_Codigo =:Produto and Pro_NumeroEmb = :Embalagem');
  tq.parambyname('Produto').asstring := p_PRO_CODIGO;
  tq.ParamByName('Embalagem').AsString := p_Embalagem;
  tq.open;
  if tq.eof then begin
    PRO_EAN := '';
    Result := 0;
  end else begin
    PRO_EAN := tq.fieldbyname('Pro_EAN').asstring;
    PRO_VIDROS := tq.fieldbyname('Pro_Vidros').AsInteger;
    Result := 1;
  end;
  tq.Close;
  tq.Free;
end;

procedure TProdEAN.Consultar;
begin
  tq.sql.clear;
  tq.sql.add('SELECT * FROM ProdEAN where Pro_Codigo =:Produto order by Pro_NumeroEmb desc');
  tq.parambyname('Produto').asstring := p_PRO_CODIGO;
  tq.open;
end;

procedure TProdEAN.RecuperaVolume(p_PRO_CODIGO: string);
var
  tq: TQuery;
begin
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.sql.add('Select count(*) Volume from ProdEAN where Pro_Codigo =:Produto');
  tq.parambyname('Produto').asstring := p_PRO_CODIGO;
  tq.open;
  xVolume := tq.fieldbyname('Volume').AsInteger;
  tq.close;
  tq.Free;
end;

function TProdEAN.Ultimo: string;
var
  tq: TQuery;
  pos, tam: Integer;
  Parametros: TParametros;
  xsql: string;
  xA, xB: string;
begin
  Parametros := TParametros.Create;
  Parametros.Recuperar('1');
  pos := length(Parametros.EAN_Empresa) + 3 + 1;
  tam := length(Parametros.EAN_Mascara);
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  xsql := 'Select max(substr(PRO_EAN,' + IntToStr(17) + ',' + IntToStr(tam) + ')) as Ultimo ' +
    'from ProdEan where length(Pro_EAN) = 24';
  tq.sql.add(xsql);
  tq.Open;
  if tq.FieldByName('Ultimo').IsNull then
    xA := '1'
  else
    xA := IntToStr(tq.FieldByName('Ultimo').AsInteger + 1);

  tq.active := False;
  tq.sql.clear;
  xsql := 'Select max(substr(PRO_EAN,' + IntToStr(15) + ',' + IntToStr(tam) + ')) as Ultimo ' +
    'from ProdEan where length(Pro_EAN) = 18';
  tq.sql.add(xsql);
  tq.Open;
  if tq.FieldByName('Ultimo').IsNull then
    xB := '1'
  else
    xB := IntToStr(tq.FieldByName('Ultimo').AsInteger + 1);

  if (xA = '1') and (xB = '1') then
    Result := '1'
  else begin
    if StrToInt(xA) > StrToInt(xB) then
      Result := xA
    else
      Result := xB;
  end;

  tq.CLose;
  tq.Free;
  Parametros.Free;
end;

function TProdEAN.ExcluirTudo(p_PRO_CODIGO: string): Byte;
var
  tq: TQuery;
begin
  tq := Tquery.Create(DmInt);
  tq.databasename := dmint.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.params.clear;
  tq.sql.add('DELETE FROM PRODEAN where Pro_Codigo =:Produto');
  tq.parambyname('Produto').asstring := p_PRO_CODIGO;
  tq.execSQL;
  Result := 1;
  tq.close;
  tq.Free;

end;

function TProdEAN.RecuperarProd(p_Ean: string): string;
var
  tq: TQuery;
  xsql: string;
begin
  xsql := 'replace(replace(Pro_EAN,' + chr(39) + '(' + chr(39) + ',' + chr(39) + chr(39) + '),' + chr(39) + ')' + chr(39) + ',' + chr(39) + chr(39) + ')';
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.sql.add('SELECT * FROM ProdEAN where ' + xsql + ' =:Ean');
  tq.parambyname('Ean').asstring := p_Ean;
  tq.open;
  if tq.eof then begin
    Result := '';
    PRO_NUMEROEMB := '';
    PRO_VIDROS := 0;
  end else begin
    Result := tq.FieldByName('Pro_Codigo').AsString;
    PRO_NUMEROEMB := tq.fieldbyname('PRO_NUMEROEMB').asstring;
    PRO_VIDROS := tq.fieldbyname('Pro_Vidros').AsInteger;
  end;
  tq.Close;
  tq.Free;
end;

function TProdEAN.RecuperarProd1(p_Ean: string): string;
var
  tq: TQuery;
  xsql: string;
begin
  xsql := 'Pro_EAN';
  tq := Tquery.Create(dmint);
  tq.databasename := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.sql.add('SELECT * FROM ProdEAN where ' + xsql + ' =:Ean');
  tq.parambyname('Ean').asstring := p_Ean;
  tq.open;
  if tq.eof then begin
    Result := '';
    PRO_NUMEROEMB := '';
    PRO_VIDROS := 0;
  end else begin
    Result := tq.FieldByName('Pro_Codigo').AsString;
    PRO_NUMEROEMB := tq.fieldbyname('PRO_NUMEROEMB').asstring;
    PRO_VIDROS := tq.fieldbyname('Pro_Vidros').AsInteger;
  end;
  tq.Close;
  tq.Free;
end;

end.
